{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "ROC-curve-kNN.ipynb",
      "provenance": [],
      "collapsed_sections": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "oPUuSjJ96Au-",
        "colab_type": "text"
      },
      "source": [
        "# **Machine Learning in Python: Making Receiver Operating Characteristic (ROC) curve**\n",
        "\n",
        "Chanin Nantasenamat\n",
        "\n",
        "<i>Data Professor YouTube channel, http://youtube.com/dataprofessor </i>\n",
        "\n",
        "In this Jupyter notebook, we will be making a Receiver Operating Characteristic (ROC) curve using a synthetic data set as an example."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "_SJy5TKvuF9s",
        "colab_type": "text"
      },
      "source": [
        "## **What is ROC curve?**\n",
        "\n",
        "The **ROC curve** summarizes the prediction performance of a classification model at all classification thresholds. Particularly, the ROC curve plots the **False Positive Rate (FPR)** on the *X-axis* and the **True Positive Rate (TPR)** on the *Y-axis*.\n",
        "\n",
        "$\\text{TPR (Sensitivity)} = \\frac{TP}{TP + FN}$\n",
        "\n",
        "$\\text{FPR (1 - Specificity)} = \\frac{FP}{TN + FP}$"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "KwebBKbP3Vsx",
        "colab_type": "text"
      },
      "source": [
        "## **Generate synthetic dataset**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "ECJbWdcw5JMu",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from sklearn.datasets import make_classification"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Wl9Gu5Ba1d1X",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "X, Y = make_classification(n_samples=2000, n_classes=2, n_features=10, random_state=0)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "eqZsiSMtrdm9",
        "colab_type": "text"
      },
      "source": [
        "## **Add noisy features to make the problem more difficult** $^1$\n"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Qlb1adRPoOU7",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import numpy as np"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "r9otz_41rPXH",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "random_state = np.random.RandomState(0)\n",
        "n_samples, n_features = X.shape\n",
        "X = np.c_[X, random_state.randn(n_samples, 200 * n_features)]"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "nAw93CgK4178",
        "colab_type": "text"
      },
      "source": [
        "## **Data splitting**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "NRmlzFOA4x9Z",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from sklearn.model_selection import train_test_split"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "yTep82KV9axn",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=.2,\n",
        "                                                    random_state=0)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "V_MvToES4n_A",
        "colab_type": "text"
      },
      "source": [
        "## **Build classification model**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Fo9Xk5T94v6j",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from sklearn.ensemble import RandomForestClassifier\n",
        "from sklearn.naive_bayes import GaussianNB\n",
        "from sklearn.neighbors import KNeighborsClassifier"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "0C3NRujmed_j",
        "colab_type": "text"
      },
      "source": [
        "### Random Forest"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "5WQ8UFXe9Zmx",
        "colab_type": "code",
        "outputId": "01076a47-8c06-41c6-c804-7f7559459336",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 153
        }
      },
      "source": [
        "rf = RandomForestClassifier(max_features=5, n_estimators=500)\n",
        "rf.fit(X_train, Y_train)"
      ],
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,\n",
              "                       criterion='gini', max_depth=None, max_features=5,\n",
              "                       max_leaf_nodes=None, max_samples=None,\n",
              "                       min_impurity_decrease=0.0, min_impurity_split=None,\n",
              "                       min_samples_leaf=1, min_samples_split=2,\n",
              "                       min_weight_fraction_leaf=0.0, n_estimators=500,\n",
              "                       n_jobs=None, oob_score=False, random_state=None,\n",
              "                       verbose=0, warm_start=False)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 8
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Aw_Ax0cne2BC",
        "colab_type": "text"
      },
      "source": [
        "### Naive Bayes"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "nxmFVCs-e9Mz",
        "colab_type": "code",
        "outputId": "89dabbc9-bf3b-4d22-d759-edb8d81f336e",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        }
      },
      "source": [
        "nb = GaussianNB()\n",
        "nb.fit(X_train, Y_train)"
      ],
      "execution_count": 9,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "GaussianNB(priors=None, var_smoothing=1e-09)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 9
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "6vmJgmWzEUdq",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 68
        },
        "outputId": "4256be31-5bf7-42d9-c3db-6d7977529230"
      },
      "source": [
        "knn = KNeighborsClassifier()\n",
        "knn.fit(X_train, Y_train)"
      ],
      "execution_count": 10,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "KNeighborsClassifier(algorithm='auto', leaf_size=30, metric='minkowski',\n",
              "                     metric_params=None, n_jobs=None, n_neighbors=5, p=2,\n",
              "                     weights='uniform')"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 10
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "hl_hDOsvDmyV",
        "colab_type": "text"
      },
      "source": [
        "## **Prediction probabilities** $^2$"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "jVkSSnnGCQ0O",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "r_probs = [0 for _ in range(len(Y_test))]\n",
        "rf_probs = rf.predict_proba(X_test)\n",
        "nb_probs = nb.predict_proba(X_test)\n",
        "knn_probs = knn.predict_proba(X_test)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "GNha6VVeDsyb",
        "colab_type": "text"
      },
      "source": [
        "Probabilities for the positive outcome is kept."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "a4j8EtvZCdF8",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "rf_probs = rf_probs[:, 1]\n",
        "nb_probs = nb_probs[:, 1]\n",
        "knn_probs = knn_probs[:, 1]"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "rf9gjJcb4i0e",
        "colab_type": "text"
      },
      "source": [
        "## **Computing AUROC and ROC curve values**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "cSfzTGWn4lXe",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from sklearn.metrics import roc_curve, roc_auc_score"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "gpr5ON6QC7ip",
        "colab_type": "text"
      },
      "source": [
        "### **Calculate AUROC**\n",
        "**ROC** is the receiver operating characteristic\n",
        "**AUROC** is the area under the ROC curve"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "yVwjOC6XC5lw",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "r_auc = roc_auc_score(Y_test, r_probs)\n",
        "rf_auc = roc_auc_score(Y_test, rf_probs)\n",
        "nb_auc = roc_auc_score(Y_test, nb_probs)\n",
        "knn_auc = roc_auc_score(Y_test, knn_probs)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "TIzyhgstDMqw",
        "colab_type": "text"
      },
      "source": [
        "### **Print AUROC scores**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "lUvZ8_BbC5uf",
        "colab_type": "code",
        "outputId": "59933cb3-8d5b-4ea3-e056-510803ca3adf",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 85
        }
      },
      "source": [
        "print('Random (chance) Prediction: AUROC = %.3f' % (r_auc))\n",
        "print('Random Forest: AUROC = %.3f' % (rf_auc))\n",
        "print('Naive Bayes: AUROC = %.3f' % (nb_auc))\n",
        "print('K Nearest Neighbors: AUROC = %.3f' % (knn_auc))"
      ],
      "execution_count": 15,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Random (chance) Prediction: AUROC = 0.500\n",
            "Random Forest: AUROC = 0.926\n",
            "Naive Bayes: AUROC = 0.993\n",
            "K Nearest Neighbors: AUROC = 0.580\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "7AsuB3AQE5FC",
        "colab_type": "text"
      },
      "source": [
        "### **Calculate ROC curve**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "lApmrHMp9YDb",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "r_fpr, r_tpr, _ = roc_curve(Y_test, r_probs)\n",
        "rf_fpr, rf_tpr, _ = roc_curve(Y_test, rf_probs)\n",
        "nb_fpr, nb_tpr, _ = roc_curve(Y_test, nb_probs)\n",
        "knn_fpr, knn_tpr, _ = roc_curve(Y_test, knn_probs)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "QGArWW4QFbXZ",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 187
        },
        "outputId": "2bad43be-2e1a-4e47-bfff-668256e92324"
      },
      "source": [
        "nb_fpr, nb_tpr"
      ],
      "execution_count": 17,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(array([0.        , 0.        , 0.        , 0.        , 0.        ,\n",
              "        0.        , 0.00483092, 0.00483092, 0.00483092, 0.00483092,\n",
              "        0.0531401 , 0.0531401 , 0.06280193, 0.06280193, 0.08695652,\n",
              "        0.08695652, 0.12560386, 0.12560386, 0.2705314 , 0.2705314 ,\n",
              "        1.        ]),\n",
              " array([0.        , 0.14507772, 0.17098446, 0.1761658 , 0.20725389,\n",
              "        0.21761658, 0.21761658, 0.22279793, 0.23316062, 0.97409326,\n",
              "        0.97409326, 0.97927461, 0.97927461, 0.98445596, 0.98445596,\n",
              "        0.98963731, 0.98963731, 0.99481865, 0.99481865, 1.        ,\n",
              "        1.        ]))"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 17
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "cygQlObWFUX4",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 85
        },
        "outputId": "3c5bb0b6-3330-47fa-b344-6a9243d32831"
      },
      "source": [
        "knn_fpr, knn_tpr"
      ],
      "execution_count": 18,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(array([0.        , 0.04347826, 0.16908213, 0.50241546, 0.79710145,\n",
              "        0.97101449, 1.        ]),\n",
              " array([0.        , 0.06217617, 0.2642487 , 0.61658031, 0.88082902,\n",
              "        0.97927461, 1.        ]))"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 18
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "tXpx2YMM4Gsb",
        "colab_type": "text"
      },
      "source": [
        "## **Plot the ROC curve**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "oL96kXed4MvL",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import matplotlib.pyplot as plt"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "v2Q6p9qmFVxB",
        "colab_type": "code",
        "outputId": "173b684e-d6e4-4de7-98d8-ab90a20f04fc",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 312
        }
      },
      "source": [
        "plt.plot(r_fpr, r_tpr, linestyle='--', label='Random prediction (AUROC = %0.3f)' % r_auc)\n",
        "plt.plot(rf_fpr, rf_tpr, marker='.', label='Random Forest (AUROC = %0.3f)' % rf_auc)\n",
        "plt.plot(nb_fpr, nb_tpr, marker='.', label='Naive Bayes (AUROC = %0.3f)' % nb_auc)\n",
        "plt.plot(knn_fpr, knn_tpr, marker='.', label='K Nearest Neighbors (AUROC = %0.3f)' % knn_auc)\n",
        "\n",
        "# Title\n",
        "plt.title('ROC Plot')\n",
        "# Axis labels\n",
        "plt.xlabel('False Positive Rate')\n",
        "plt.ylabel('True Positive Rate')\n",
        "# Show legend\n",
        "plt.legend() # \n",
        "# Show plot\n",
        "#plt.show()"
      ],
      "execution_count": 20,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.legend.Legend at 0x7f3bc0a897f0>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 20
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "6GhglFZ5dI2M",
        "colab_type": "text"
      },
      "source": [
        "## **Save ROC plot**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "h0o6gMvYdrXg",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from IPython.display import Image, display"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "MkbOauQueDnA",
        "colab_type": "text"
      },
      "source": [
        "### Save plot to files"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "O7kzGtE_dNfo",
        "colab_type": "code",
        "outputId": "af518469-cb56-4a36-8353-43c99b53f5ec",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        }
      },
      "source": [
        "plt.savefig('roc.pdf')"
      ],
      "execution_count": 22,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 432x288 with 0 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "j8ZKJopldaYt",
        "colab_type": "code",
        "outputId": "07c6173b-7f3d-4523-a582-ac1798ed3c73",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        }
      },
      "source": [
        "plt.savefig('roc.png')"
      ],
      "execution_count": 23,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "text/plain": [
              "<Figure size 432x288 with 0 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "L3TOpsDSdVv3",
        "colab_type": "code",
        "outputId": "1a873c39-1bf4-441f-8e78-90b472f97b54",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 85
        }
      },
      "source": [
        "! ls -l"
      ],
      "execution_count": 24,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "total 12\n",
            "-rw-r--r-- 1 root root 1191 Apr 23 08:10 roc.pdf\n",
            "-rw-r--r-- 1 root root 1273 Apr 23 08:10 roc.png\n",
            "drwxr-xr-x 1 root root 4096 Apr  3 16:24 sample_data\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "70RXsiGNeGTy",
        "colab_type": "text"
      },
      "source": [
        "### View the generated PNG and PDF files"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "KjKvljmy5O25",
        "colab_type": "text"
      },
      "source": [
        "## **Reference**\n",
        "1. https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html\n",
        "2. https://machinelearningmastery.com/roc-curves-and-precision-recall-curves-for-classification-in-python/\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "qen82yXu_VFw",
        "colab_type": "text"
      },
      "source": [
        "---"
      ]
    }
  ]
}